import instance from "../utils/request";

//一般情况下，接口类型会放到一个文件
// 下面两个TS接口，表示要传的参数
interface ReqStatus {
    id: string
    navStatus: string
}
interface ReqRegister {
    username: string
    password: string
    nickname: string
}
interface ReqLogin {
    username: string
    password: string
    captchaVerification: string
}


// Res是返回的参数，T是泛型，需要自己定义，返回对数统一管理***
type Res<T> = Promise<ItypeAPI<T>>;
// 一般情况下响应数据返回的这三个参数，
// 但不排除后端返回其它的可能性，
interface ItypeAPI<T> {
    data: T,//请求的数据，用泛型
    msg: string | null // 返回状态码的信息，如请求成功等
    code: number //返回后端自定义的200，404，500这种状态码
}


// post请求 ，没参数，但要路径传参
export const StatusAPI = (data: ReqStatus): Res<null> =>
    instance.post(`/productCategory?ids=${data.id}&navStatus=${data.navStatus}`);


//  get请求，没参数，
export const FlashSessionListApi = (): Res<null> =>
    instance.get("/flashSession/list");

// get请求，有参数，路径也要传参  (也可能直接在这写类型，不过不建议,大点的项目会维护一麻烦)
export const ProductCategoryApi = (params: { parentId: number }): any =>
    instance.get(`/productCategory/list/${params.parentId}`, { params });

// get请求，有参数，(如果你不会写类型也可以使用any,不过不建议,因为用了之后 和没写TS一样)
export const AdminListAPI = (params: any): any =>
    instance.get("/admin/list", { params });



//用户注册
export const RegisterAPI = (data: ReqRegister): Res<null> =>
    instance.post("/register", data);

//用户登陆
export const LoginAPI = (data: ReqLogin): Res<any> =>
    instance.post("/login", data);

//退出登录
export const LogoutAPI = (): Res<null> => {
    const config = {
      headers: {
        // 添加请求头
        "Authorization": "Bearer "+localStorage.getItem("x-auth-token"),
        "Content-Type": "application/json"
      }
    };
  
    return instance.post("/logout", null, config);
  }

//查询order的拥有者信息
export const GetOrderOwnDataAPI = (params: { orderId: string }): Res<any> =>
    instance.get("/user/getOrderOwnData",{ params });